#ifndef CANVAS_H_
#define CANVAS_H_

#include "SDL2/SDL.h"
#include "SDL2/SDL_image.h"
#include <string>
#include <list>
#include "../modelo/Elemento.h"
#include "../constantes.h"
#include <vector>
#include "../parser/BuilderElementos.h"
#include "../parser/AreaOtorgada.h"

using namespace std;

class Canvas {

private:
	string rutaFondo;
	list<Elemento*>* listaElementos;
	void dibujarElementos(SDL_Renderer* renderer);
	SDL_Texture *texturaFondo;
	SDL_Texture *areaRestringida;
	vector<int>* vectorTamanios;
	int indice;
	void reasignarElementosEspeciales();

public:
	static const int cantUnidadesLogicasAncho = 100;
	static const int cantUnidadesLogicasAlto = 100;
	Canvas();
	virtual ~Canvas();
	void dibujarElementosServer(SDL_Renderer* renderer);
	int dibujar(SDL_Renderer* renderer, double iDibX, double iDibY,
			double wDibX, double hDibY, AreaOtorgada*);
	string getRutaFondo();
	void setRutaFondo(string);
	void agregarElemento(Elemento*);
	void eliminarElemento(Elemento*);
	list<Elemento*>* getListaElementos();
	Elemento* devolverElementoEnXeY(int x, int y,SDL_Renderer* renderer);
	Elemento* devolverElementoEnXeYRotacion(int x, int y);
	void cambiarFondo(SDL_Renderer* ,string);
	Uint32 getPixelFromSurface(SDL_Surface *surface, int x, int y);
	Elemento* obtenerElementoSuperpuesto(double x, double y, Elemento*,SDL_Renderer*);
	void sueltoElementoEnCanvas(int,int, Elemento**, SDL_Renderer*, AreaOtorgada*);
	bool esPixelTransparente(int x, int y, Elemento* elemento, SDL_Renderer* renderer);
	void aumentaElementos(int x,int y,SDL_Renderer* renderer);
	void reduceElementos(int x,int y,SDL_Renderer* renderer);
	void pintarElementoConError(Elemento*);
	void pintarElementoOk(Elemento*);
	void pintarElementoNormalidad(Elemento*);
	void cambioSentidoRotacion(int x,int y,SDL_Renderer* renderer,bool rotaADerecha);
	void reconvertirElementos(BuilderElementos* builderElementos);
	Elemento* buscarElementoPorId(int id);
	Elemento* obtenerFlipper(int);
	void animar();
	void pincharGlobo(int x,int y,SDL_Renderer* renderer);
	void inicializarIdsServer();
	void destruirDibujoZona();

};

#endif /* CANVAS_H_ */
